阅读更多

1顶
0踩

互联网

原创新闻 训练神经网络的五大算法

2016-10-25 08:46 by 副主编 mengyidan1988 评论(0) 有14784人浏览
引用

原文: 5 algorithms to train a neural network
作者: Alberto Quesada 译者: KK4SBB
责编:何永灿,关注人工智能,投稿请联系 heyc@csdn.net 或微信号 289416419

神经网络模型的每一类学习过程通常被归纳为一种训练算法。训练的算法有很多,它们的特点和性能各不相同。



问题的抽象
人们把神经网络的学习过程转化为求损失函数f的最小值问题。一般来说,损失函数包括误差项和正则项两部分。误差项衡量神经网络模型在训练数据集上的拟合程度,而正则项则是控制模型的复杂程度,防止出现过拟合现象。

损失函数的函数值由模型的参数(权重值和偏置值)所决定。我们可以把两部分参数合并为一个n维的权重向量,记为w。下图是损失函数f(w)的图示。



如上图所示,w*是损失函数的最小值。在空间内任意选择一个点A,我们都能计算得到损失函数的一阶、二阶导数。一阶导数可以表示为一个向量:

ᐁif(w) = df/dwi (i = 1,…,n)

同样的,损失函数的二阶导数可以表示为海森矩阵( Hessian Matrix ):

Hi,jf(w) = d2f/dwi·dwj (i,j = 1,…,n)

多变量的连续可微分函数的求解问题一直被人们广泛地研究。许多的传统方法都能被直接用于神经网络模型的求解。

一维优化方法
尽管损失函数的值需要由多个参数决定,但是一维优化方法在这里也非常重要。这些方法常常用于训练神经网络模型。

许多训练算法首先计算得到一个训练的方向d,以及速率η来表示损失值在此方向上的变化,f(η)。下图片展示了这种一维函数。



f和η*在η1和η2所在的区间之内。

由此可见,一维优化方法就是寻找到某个给定的一维函数的最小值。黄金分段法和Brent方法就是其中两种广泛应用的算法。这两种算法不断地缩减最小值的范围,直到η1和η2两点之间的距离小于设定的阈值。

多维优化方法
我们把神经网络的学习问题抽象为寻找参数向量w*的问题,使得损失函数f在此点取到最小值。假设我们找到了损失函数的最小值点,那么就认为神经网络函数在此处的梯度等于零。

通常情况下,损失函数属于非线性函数,我们很难用训练算法准确地求得最优解。因此,我们尝试在参数空间内逐步搜索,来寻找最优解。每搜索一步,重新计算神经网络模型的参数,损失值则相应地减小。

我们先随机初始化一组模型参数。接着,每次迭代更新这组参数,损失函数值也随之减小。当某个特定条件或是终止条件得到满足时,整个训练过程即结束。

现在我们就来介绍几种神经网络的最重要训练算法。



1. 梯度下降法(Gradient descent)
梯度下降方法是最简单的训练算法。它仅需要用到梯度向量的信息,因此属于一阶算法。

我们定义f(wi) = fi and ᐁf(wi) = gi。算法起始于W0点,然后在第i步沿着di = -gi方向从wi移到wi+1,反复迭代直到满足终止条件。梯度下降算法的迭代公式为:

wi+1 = wi - di·ηi, i=0,1,…

参数η是学习率。这个参数既可以设置为固定值,也可以用一维优化方法沿着训练的方向逐步更新计算。人们一般倾向于逐步更新计算学习率,但很多软件和工具仍旧使用固定的学习率。

下图是梯度下降训练方法的流程图。如图所示,参数的更新分为两步:第一步计算梯度下降的方向,第二步计算合适的学习率。



梯度下降方法有一个严重的弊端,若函数的梯度变化如图所示呈现出细长的结构时,该方法需要进行很多次迭代运算。而且,尽管梯度下降的方向就是损失函数值减小最快的方向,但是这并不一定是收敛最快的路径。下图描述了此问题。



当神经网络模型非常庞大、包含上千个参数时,梯度下降方法是我们推荐的算法。因为此方法仅需要存储梯度向量(n空间),而不需要存储海森矩阵(n2空间)

2.牛顿算法(Newton’s method)
因为牛顿算法用到了海森矩阵,所以它属于二阶算法。此算法的目标是使用损失函数的二阶偏导数寻找更好的学习方向。

我们定义f(wi) = fi, ᐁf(wi) = gi and Hf(wi) = Hi。用泰勒展开式估计函数f在w0值

f = f0 + g0 · (w - w0) + 0.5 · (w - w0)2 · H0

H0是函数f在w0的海森矩阵值。在f(w)的最小值处g = 0,我们得到了第二个等式

g = g0 + H0 · (w - w0) = 0

因此,将参数初始化在w0,牛顿算法的迭代公式为

wi+1 = wi - Hi-1·gi, i = 0,1,…

Hi-1·gi 被称为牛顿项。值得注意的是,如果海森矩阵是一个非正定矩阵,那么参数有可能朝着最大值的方向移动,而不是最小值的方向。因此损失函数值并不能保证在每次迭代都减小。为了避免这种问题,我们通常会对牛顿算法的等式稍作修改:

wi+1 = wi - (Hi-1·gi) ·ηi, i=0,1,…

学习率η既可以设为固定值,也可以动态调整。向量d = Hi-1·gi被称为牛顿训练方向。

下图展示的是牛顿法的流程图。参数的更新也分为两步,计算牛顿训练方向和合适的学习率。



此方法训练神经网络模型的效率被证明比梯度下降法更好。由于共轭梯度法不需要计算海森矩阵,当神经网络模型较大时我们也建议使用。

4. 柯西-牛顿法(Quasi-Newton method)
由于牛顿法需要计算海森矩阵和逆矩阵,需要较多的计算资源,因此出现了一个变种算法,称为柯西-牛顿法,可以弥补计算量大的缺陷。此方法不是直接计算海森矩阵及其逆矩阵,而是在每一次迭代估计计算海森矩阵的逆矩阵,只需要用到损失函数的一阶偏导数。

海森矩阵是由损失函数的二阶偏导数组成。柯西-牛顿法的主要思想是用另一个矩阵G来估计海森矩阵的逆矩阵,只需要损失函数的一阶偏导数。柯西-牛顿法的更新方程可以写为:

wi+1 = wi - (Gi·gi)·ηi, i=0,1,…

学习率η既可以设为固定值,也可以动态调整。海森矩阵逆矩阵的估计G有多种不同类型。两种常用的类型是Davidon–Fletcher–Powell formula (DFP)和Broyden–Fletcher–Goldfarb–Shanno formula (BFGS)。

柯西-牛顿法的流程图如下所示。参数更新的步骤分为计算柯西-牛顿训练方向和计算学习率。



许多情况下,这是默认选择的算法:它比梯度下降法和共轭梯度法更快,而不需要准确计算海森矩阵及其逆矩阵。

5. Levenberg-Marquardt算法
Levenberg-Marquardt算法又称为衰减的最小 平方法,它针对损失函数是平方和误差的形式。它也不需要准确计算海森矩阵,需要用到梯度向量和雅各布矩阵。

假设损失函数f是平方和误差的形式:

f = ∑ ei2, i=0,…,m

其中m是训练样本的个数。

我们定义损失函数的雅各布矩阵由误差项对参数的偏导数组成,

Ji,jf(w) = dei/dwj (i = 1,…,m & j = 1,…,n)

m是训练集中的样本个数,n是神经网络的参数个数。雅各布矩阵的规模是m·n

损失函数的梯度向量是:

ᐁf = 2 JT·e

e是所有误差项组成的向量。

最后,我们可以用这个表达式来估计计算海森矩阵。

Hf ≈ 2 JT·J + λI

λ是衰减因子,以确保海森矩阵是正的,I是单位矩阵。

此算法的参数更新公式如下:

wi+1 = wi - (JiT·Ji+λiI)-1·(2 JiT·ei), i=0,1,…

若衰减因子λ设为0,相当于是牛顿法。若λ设置的非常大,这就相当于是学习率很小的梯度下降法。

参数λ的初始值非常大,因此前几步更新是沿着梯度下降方向的。如果某一步迭代更新失败,则λ扩大一些。否则,λ随着损失值的减小而减小,Levenberg-Marquardt接近牛顿法。这个过程可以加快收敛的速度。

下图是Levenberg-Marquardt算法训练过程的流程图。第一步计算损失值、梯度和近似海森矩阵。然后衰减参数和衰减系数。



由于Levenberg-Marquardt算法主要针对平方和误差类的损失函数。因此,在训练这类误差的神经网络模型时速度非常快。但是这个算法也有一些缺点。首先,它不适用于其它类型的损失函数。而且,它也不兼容正则项。最后,如果训练数据和网络模型非常大,雅各布矩阵也会变得很大,需要很多内存。因此,当训练数据或是模型很大时,我们并不建议使用Levenberg-Marquardt算法。

内存使用和速度的比较
下图绘制了本文讨论的五种算法的计算速度和内存需求。如图所示,梯度下降法往往是最慢的训练方法,它所需要的内存也往往最少。相反,速度最快的算法一般是Levenberg-Marquardt,但需要的内存也更多。柯西-牛顿法较好地平衡了两者。

总之,如果我们的神经网络模型有上千个参数,则可以用节省存储的梯度下降法和共轭梯度法。如果我们需要训练很多网络模型,每个模型只有几千个训练数据和几百个参数,则Levenberg-Marquardt可能会是一个好选择。其余情况下,柯西-牛顿法的效果都不错。
  • 大小: 38 KB
  • 大小: 16.7 KB
  • 大小: 9.7 KB
  • 大小: 26.7 KB
  • 大小: 29.2 KB
  • 大小: 45.3 KB
  • 大小: 29.5 KB
  • 大小: 28.7 KB
  • 大小: 36.7 KB
  • 大小: 26.4 KB
1
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 训练神经网络的五大算法,算法数据结构

    训练神经网络的五大算法,算法数据结构 五大常用算法

  • 神经网络中的常用算法-BP算法

    反向传播是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。该方法对网络中所有权重计算损失函数的梯度。这个梯度会反馈给最优化方法,用来更新权值以最小化损失函数。反向传播这个...

  • 人工神经网络有哪些算法,神经网络都有哪些算法

    人工神经网络(ArtificialNeuralNetwork,即ANN),是20世纪80年代以来人工智能领域兴起的研究热点。它从信息处理角度对人脑神经元网络进行抽象,建立某种简单模型,按不同的连接方式组成不同的网络。在工程与学术界...

  • 最新训练神经网络的五大算法

     神经网络模型的每一类学习过程通常被归纳为一种训练算法。训练的算法有很多,它们的特点和性能各不相同。    问题的抽象  人们把神经网络的学习过程转化为求损失函数f的最小值问题。一般来说,损失函数...

  • 深度神经网络算法有哪些,最简单的神经网络算法

    深度学习架构,例如深度神经网络、深度信念网络、循环神经网络和卷积神经网络,已经被应用于包括计算机视觉、语音识别、自然语言处理、音频识别、社交网络过滤、机器翻译、生物信息学、药物设计、医学图像分析、材料...

  • 神经网络——Python实现BP神经网络算法(理论+例子+程序)

    采用BP算法的多层感知器是至今为止应用最广泛的神经网络,在多层感知器的应用中,以图3-15所示的单隐层网络的应用最为普遍。一般习惯将单隐层前馈网称为三层感知器,所谓三层包括了输入层、隐层和输出层。 算法...

  • BP神经网络预测matlab代码讲解与实现步骤

    BP神经网络的简介和结构参数1.1 BP神经网络的结构组成1.2 BP神经网络训练界面的参数解读2. 实现BP网络的步骤3. matlab代码编写4. BP代码运行结果4.1 预测值和真实值的误差计算(MAE、MSE、MRSE)4.2 BP网络训练的...

  • BP神经网络算法基本原理,bp神经网络的算法步骤

    BP算法的基本思想是:学习过程由信号正向传播与误差的反向回传两个部分组成;正向传播时,输入样本从输入...2、通过各节点间的连接情况正向逐层处理后,得到神经网络的实际输出。3、计算网络实际输出与期望输出的误差。

  • bp神经网络的算法步骤,BP神经网络算法流程图

    基坑降水引起地面沉降的BP神经网络预测模型建模过程如下:(1)样本选择因基坑降水引起的地面沉降量和距离基坑的距离关系密切,因此建模选用“基坑降水引起沉降工程数据(第二类)”(见表4.1)中的相关数据作为样本...

  • 神经网络的图像识别技术,神经网络图像识别算法

    1989年,燕乐存(YannLeCun)等人开始将1974年提出的标准反向传播算法[3]应用于深度神经网络,这一网络被用于手写邮政编码识别。尽管算法可以成功执行,但计算代价非常巨大,神经网路的训练时间达到了3天,因而无法...

  • BP神经网络的Matlab实现——人工智能算法

    这几天在各大媒体上接触到了人工智能机器学习,觉得很有意思,于是开始入门最简单的机器算法——神经网络训练算法(Neural Network Training);以前一直觉得机器学习很高深,到处是超高等数学、线性代数、数理统计。...

  • PyTorch深度学习实战(1)——神经网络与模型训练过程详解

    在本节中,我们将了解传统机器学习与人工神经网络间的差异,并了解如何在实现前向传播...并将实现网络的所有关键组成——前向传播、激活函数、损失函数、链式法则和梯度下降,从零开始构建并训练了一个简单的神经网络。

  • 利用gpu加速神经网络算法,为什么用gpu 模型训练

    使用神经网络训练,一个最大的问题就是训练速度的问题,特别是对于深度学习而言,过多的参数会消耗很多的时间,在神经网络训练过程中,运算最多的是关于矩阵的运算,这个时候就正好用到了GPU,GPU本来是用来处理图形...

  • 神经网络bp算法应用,bp神经网络动量因子

    神经网络具有综合能力强,对数据的要求不高,适时学习等突出优点,其操作简便,节省时间,网络初学者即使不了解其算法的本质,也可以直接应用功能丰富的函数来实现自己的目的。因此,易于被基层单位预防工作者掌握和...

  • Python零基础30天速通(小白定制版)(完结)

    宣导片:开启Python进阶之路 30动漫番剧播放量影响因素分析1综合案例 29小红书卖货实力与用户分析1综合案例 28星巴克门店探索|Matplotlib实战 27詹姆斯哈登的制胜宝典1 Panads的使用 26一晚5万的酒店| Numpy的使用 25揭开数据分析的面纱1数据分析"三剑客"概述 24虎牙直播数据告诉你谁最火1案例篇 23我的音乐我做主1数据保存之csv和excel 22电竟| BeautifulSoup解析HTML 21对李焕英的评价1HTML基础 20我的美食我做主1爬虫介绍、requests请 19看我四十二变1内容提取和格式转换 18我的版权我做主1PDF就是这么帅 17婚礼策划师离不开你|亲爱的PPT 16运营部的烦恼1战胜Excel 15Up主的创作之路1 Python与word初次 14你的offer之选|邮件发送 13我的存在只为悦你1 Pillow图片处理 12你喜欢的电竟赛事大全1 Python的文件操作 11哈利波特的魔法棒|模块 10龙珠之赛亚人1面向对象基础 09大吉大利今晚吃鸡1特种兵的战场(项目案

  • 20240519基本完整

    20240519基本完整

  • MATLAB仿真项目-大数据源码-疲劳检测识别,可应用于疲劳驾驶监测,专注度检测等(高分期末大作业).rar

    本项目提供了一个基于MATLAB的疲劳检测识别仿真系统,旨在帮助计算机相关专业的在校学生、老师和企业员工更好地学习和实践大数据与人工智能技术。该项目可应用于疲劳驾驶监测、专注度检测等领域,具有较高的实用价值。 项目源码已经过运行测试,确保OK,可作为课程设计、毕业设计的优质资源。此外,我们还为您提供了一些网络相关资源,以便您在学习过程中进行参考。这些资源将帮助您更好地理解项目的原理和应用。 本项目的源码适用于初学者,即使是编程基础较弱的同学也能快速上手。同时,源码结构清晰,易于理解和修改。您可以在这个基础上进行二次开发,实现更多有趣的功能。 请放心下载使用,我们为您提供了详细的文档说明,以便您更好地了解和使用该项目。希望这个项目能为您提供实质性的帮助,祝您在学习和工作中取得更好的成绩!

  • 利用协同过滤算法,基于用户历史订单数据,对店铺的用户和商品进行推荐.zip

    协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。它主要依赖于用户和物品之间的行为关系进行推荐。 协同过滤算法主要分为两类: 基于物品的协同过滤算法:给用户推荐与他之前喜欢的物品相似的物品。 基于用户的协同过滤算法:给用户推荐与他兴趣相似的用户喜欢的物品。 协同过滤算法的优点包括: 无需事先对商品或用户进行分类或标注,适用于各种类型的数据。 算法简单易懂,容易实现和部署。 推荐结果准确性较高,能够为用户提供个性化的推荐服务。 然而,协同过滤算法也存在一些缺点: 对数据量和数据质量要求较高,需要大量的历史数据和较高的数据质量。 容易受到“冷启动”问题的影响,即对新用户或新商品的推荐效果较差。 存在“同质化”问题,即推荐结果容易出现重复或相似的情况。 协同过滤算法在多个场景中有广泛的应用,如电商推荐系统、社交网络推荐和视频推荐系统等。在这些场景中,协同过滤算法可以根据用户的历史行为数据,推荐与用户兴趣相似的商品、用户或内容,从而提高用户的购买转化率、活跃度和社交体验。 未来,协同过滤算法的发展方向可能是结合其他推荐算法形成混合推荐系统,以充分发挥各算法的优势。

  • 用C#实现人工智能中的八数码问题,有界面效果,可以得出结果,也可以逐步求解.zip

    用C#实现人工智能中的八数码问题,有界面效果,可以得出结果,也可以逐步求解.zip

Global site tag (gtag.js) - Google Analytics